#include <QtGui>
#include "termsAndMaterials.h"

TermsAndMaterials::TermsAndMaterials(QWidget *parent) : QWidget(parent) {

  russianCodec = QTextCodec::codecForName("UTF-8");
  QTextCodec::setCodecForTr(russianCodec);
  QTextCodec::setCodecForCStrings(russianCodec);
  
  //Размер текста для элементов
  int sizeText = 4;
  //Размер обозначений
  int sizeSub = 5;
  //Размер метки
  int sizeLabel1 = 270;
  int sizeLabel2 = 310;

  //Между элементами группы
  int spacing = 10;

  //Сдвиги
  int wShift = 10;
  int hShift = 20;
  //Промежутки между элементами
  int wSpace = sizeLabel1+wShift+spacing+WCELLEDIT+60;
  int hSpace = 25;

  //Отступ
  int indent = 5;

  QString strName;

//P
  strName  = "<font size=";
  strName += QString().setNum(sizeText);
  strName += ">Период превышения интенсивности (P):</font>";

  nameP = new QLabel(this);
  nameP->setOpenExternalLinks(false);
  nameP->setTextInteractionFlags(Qt::NoTextInteraction);
  nameP->setText(strName);
  nameP->setIndent(indent);
  nameP->resize(sizeLabel2, 20);
  nameP->move(wSpace*0+wShift, hSpace*0+hShift);

  editP = new CellEdit(this);
  editP->setIsShowButton(false);
  editP->setIsShowSpin(true);
  editP->setIsIntSpin(false);
  editP->setStepDSpin(0.01);
  editP->setDMin(0.01);
  editP->setDMax(100);
  editP->setEditView();
  editP->move(wSpace*0+nameP->width()+wShift+spacing, hSpace*0+hShift);

//t
  strName  = "<font size=";
  strName += QString().setNum(sizeText);
  strName += ">Продолжительность дождя (t<sub><font size=";
  strName += QString().setNum(sizeSub);
  strName += ">r</sub>):</font>";

  nameT = new QLabel(this);
  nameT->setOpenExternalLinks(false);
  nameT->setTextInteractionFlags(Qt::NoTextInteraction);
  nameT->setText(strName);
  nameT->setIndent(indent);
  nameT->resize(sizeLabel2, 20);
  nameT->move(wSpace*0+wShift, hSpace*1+hShift);
  // nameT->move(wSpace*1+wShift, hSpace*2+hShift);

  editT = new CellEdit(this);
  editT->setIsShowButton(false);
  editT->setIsShowSpin(true);
  editT->setIsIntSpin(true);
  editT->setStepISpin(1);
  editT->setIMin(5);
  editT->setIMax(999);
  editT->setEditView();
  editT->move(wSpace*0+nameT->width()+wShift+spacing, hSpace*1+hShift);
  // editT->move(wSpace*1+nameT->width()+wShift+spacing, hSpace*2+hShift);

//q20
  strName  = "<font size=";
  strName += QString().setNum(sizeText);
  strName += ">Интенсивность дождя (q<sub><font size=";
  strName += QString().setNum(sizeSub);
  strName += ">20</sub>):</font>";

  nameQ20 = new QLabel(this);
  nameQ20->setOpenExternalLinks(false);
  nameQ20->setTextInteractionFlags(Qt::NoTextInteraction);
  nameQ20->setText(strName);
  nameQ20->setIndent(indent);
  nameQ20->resize(sizeLabel2, 20);
  nameQ20->move(wSpace*0+wShift, hSpace*2+hShift);
  // nameQ20->move(wSpace*0+wShift, hSpace*3+hShift);

  editQ20 = new CellEdit(this);
  editQ20->setIsShowButton(true);
  editQ20->setIsShowSpin(true);
  editQ20->setIsIntSpin(true);
  editQ20->setStepISpin(1);
  editQ20->setIMin(1);
  editQ20->setIMax(300);
  editQ20->setEditView();
  editQ20->move(wSpace*0+nameQ20->width()+wShift+spacing, hSpace*2+hShift);
  // editQ20->move(wSpace*0+nameQ20->width()+wShift+spacing, hSpace*3+hShift);

  connect(editQ20, SIGNAL(clickButton()), this, SIGNAL(callDMap()));

//Регион
  strName  = "<font size=";
  strName += QString().setNum(sizeText);
  strName += ">Номер региона:</font>";

  nameRegion = new QLabel(this);
  nameRegion->setOpenExternalLinks(false);
  nameRegion->setTextInteractionFlags(Qt::NoTextInteraction);
  nameRegion->setText(strName);
  nameRegion->setIndent(indent);
  nameRegion->resize(sizeLabel2, 20);
  nameRegion->move(wSpace*0+wShift, hSpace*3+hShift);
  // nameRegion->move(wSpace*0+wShift, hSpace*2+hShift);

  editRegion = new CellEdit(this);
  editRegion->setIsShowButton(true);
  editRegion->setIsShowSpin(true);
  editRegion->setIsIntSpin(true);
  editRegion->setStepISpin(1);
  editRegion->setIMin(1);
  editRegion->setIMax(47);
  editRegion->setEditView();
  editRegion->move(wSpace*0+nameRegion->width()+wShift+spacing, hSpace*3+hShift);
  // editRegion->move(wSpace*0+nameRegion->width()+wShift+spacing, hSpace*2+hShift);

  connect(editRegion, SIGNAL(clickButton()), this, SIGNAL(callDRegion()));

//n
  strName  = "<font size=";
  strName += QString().setNum(sizeText);
  strName += ">Коэффициент шероховатости (n):</font>";

  nameN = new QLabel(this);
  nameN->setOpenExternalLinks(false);
  nameN->setTextInteractionFlags(Qt::NoTextInteraction);
  nameN->setText(strName);
  nameN->setIndent(indent);
  nameN->resize(sizeLabel1, 20);
  nameN->move(wSpace*1+wShift, hSpace*0+hShift);
  // nameN->move(wSpace*0+wShift, hSpace*0+hShift);

  editN = new CellEdit(this);
  editN->setIsShowButton(true);
  editN->setIsShowSpin(true);
  editN->setIsIntSpin(false);
  editN->setStepDSpin(0.001);
  editN->setDMin(0.01);
  editN->setDMax(0.05);
  editN->setEditView();
  editN->move(wSpace*1+nameN->width()+wShift+spacing, hSpace*0+hShift);
  // editN->move(wSpace*0+nameN->width()+wShift+spacing, hSpace*0+hShift);

  connect(editN, SIGNAL(clickButton()), this, SIGNAL(callDConcrete()));

//Бетон
  strName  = "<font size=";
  strName += QString().setNum(sizeText);
  strName += ">Марка бетона:</font>";

  nameConcrete = new QLabel(this);
  nameConcrete->setOpenExternalLinks(false);
  nameConcrete->setTextInteractionFlags(Qt::NoTextInteraction);
  nameConcrete->setText(strName);
  nameConcrete->setIndent(indent);
  nameConcrete->resize(sizeLabel1, 20);
  nameConcrete->move(wSpace*1+wShift, hSpace*1+hShift);
  // nameConcrete->move(wSpace*0+wShift, hSpace*1+hShift);

  editConcrete = new CellEdit(this);
  editConcrete->setIsShowButton(true);
  editConcrete->setIsShowSpin(false);
  // editConcrete->setColor(this->palette().base().color());
  editConcrete->isIndent(false);
  editConcrete->setAutoFillBackground(false);
  editConcrete->setEditView();
  editConcrete->move(wSpace*1+nameConcrete->width()+wShift+spacing, hSpace*1+hShift);
  // editConcrete->move(wSpace*0+nameConcrete->width()+wShift+spacing, hSpace*1+hShift);

  connect(editConcrete, SIGNAL(clickButton()), this, SIGNAL(callDClConcrete()));

//zmid
  strName  = "<font size=";
  strName += QString().setNum(sizeText);
  strName += ">Коэффициент стока (z<sub><font size=";
  strName += QString().setNum(sizeSub);
  strName += ">mid</sub>):</font>";

  nameZmid = new QLabel(this);
  nameZmid->setOpenExternalLinks(false);
  nameZmid->setTextInteractionFlags(Qt::NoTextInteraction);
  nameZmid->setText(strName);
  nameZmid->setIndent(indent);
  nameZmid->resize(sizeLabel1, 20);
  nameZmid->move(wSpace*1+wShift, hSpace*2+hShift);
  // nameZmid->move(wSpace*1+wShift, hSpace*1+hShift);

  editZmid = new CellEdit(this);
  editZmid->setIsShowButton(true);
  editZmid->setIsShowSpin(true);
  editZmid->setIsIntSpin(false);
  editZmid->setStepDSpin(0.001);
  editZmid->setDMin(0.001);
  editZmid->setDMax(1.000);
  editZmid->setEditView();
  editZmid->move(wSpace*1+nameZmid->width()+wShift+spacing, hSpace*2+hShift);
  // editZmid->move(wSpace*1+nameZmid->width()+wShift+spacing, hSpace*1+hShift);

  connect(editZmid, SIGNAL(clickButton()), this, SIGNAL(callDTypeUpside()));
  
//Вычисления при изменении переменных
  connect(editN, SIGNAL(changeValueDSpin(double)), this, SIGNAL(callCalcWithNewN(double)));
  connect(editN, SIGNAL(changeValueDSpin(double)), this, SLOT(genDoubleMessageN(double)));

  connect(editRegion, SIGNAL(changeValueISpin(int)), this, SIGNAL(callCalcWithNewRegion(int)));
  connect(editRegion, SIGNAL(changeValueISpin(int)), this, SLOT(genIntMessageRegion(int)));

  connect(editP, SIGNAL(changeValueDSpin(double)), this, SIGNAL(callCalcWithNewP(double)));
  connect(editP, SIGNAL(changeValueDSpin(double)), this, SLOT(genDoubleMessageP(double)));

  connect(editQ20, SIGNAL(changeValueISpin(int)), this, SIGNAL(callCalcWithNewQ20(int)));
  connect(editQ20, SIGNAL(changeValueISpin(int)), this, SLOT(genIntMessageQ20(int)));

  connect(editZmid, SIGNAL(changeValueDSpin(double)), this, SIGNAL(callCalcWithNewRunnel(double)));
  connect(editZmid, SIGNAL(changeValueDSpin(double)), this, SLOT(genDoubleMessageZmid(double)));

  connect(editT, SIGNAL(changeValueISpin(int)), this, SIGNAL(callCalcWithNewTime(int)));
  connect(editT, SIGNAL(changeValueISpin(int)), this, SLOT(genIntMessageT(int)));

} //TermsAndMaterials::TermsAndMaterials(QWidget *parent) : QWidget(parent)

void TermsAndMaterials::genIntMessageQ20(int num) {

  QString str("");
  str += "<b>q<sub>20</sub> =</b> ";
  str += QString().setNum(num);
  str += " <i>л/с на га</i>";
  str += " (";
  str += QString().setNum(toPrec((double)(num)/1000), 'g', STRPREC);
  str += " <i>м<sup>3</sup>/с на га</i>)";

  emit newMessage(str);

} //void TermsAndMaterials::genIntMessageQ20(int num)

void TermsAndMaterials::genDoubleMessageN(double num) {

  QString str("");
  QString text1("");
  // QString text1(" <b>Подходящая Облицовка:</b>");
  int isItem = false;

  if ((0.012 <= num) && (num <= 0.014)) { 

    if (!isItem) str += text1;
    str += " Бетонная хорошо отделанная";
    isItem = true;

  } //if ((0.012 <= num) && (num <= 0.014))

  if ((0.015 <= num) && (num <= 0.017)) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Бетонная грубая";
    isItem = true;

  } //if ((0.015 <= num) && (num <= 0.017))

  if ((0.012 <= num) && (num <= 0.015)) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Сборные железобетонные лотки";
    isItem = true;

  } //if ((0.012 <= num) && (num <= 0.015))

  if ((0.013 <= num) && (num <= 0.016)) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Покрытия из асфальтобитумных материалов";
    isItem = true;

  } //if ((0.013 <= num) && (num <= 0.016))

  if ((0.030 <= num) && (num <= 0.035)) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Одернованное русло";
    isItem = true;

  } //if ((0.030 <= num) && (num <= 0.035))

  if (!isItem) { str += "<b>n =</b> "; str += QString().setNum(toPrec(num), 'g', STRPREC); }

  emit newMessage(str);

} //void TermsAndMaterials::genDoubleMessageN(double num)

void TermsAndMaterials::genDoubleMessageZmid(double num) {

  QString str("");
  QString text1("");
  int isItem = false;

  if (fabs(num - 0.224) < 0.0001) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Брусчатые мостовые и черные щебеночные покрытия дорог";
    isItem = true;

  } //if (fabs(num - 0.224) < 0.0001)

  if (fabs(num - 0.145) < 0.0001) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Булыжные мостовые";
    isItem = true;

  } //if (fabs(num - 0.145) < 0.0001)

  if (fabs(num - 0.125) < 0.0001) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Щебеночные покрытия, не обработанные вяжущими";
    isItem = true;

  } //if (fabs(num - 0.125) < 0.0001)

  if (fabs(num - 0.090) < 0.0001) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Гравийные садово-парковые дорожки";
    isItem = true;

  } //if (fabs(num - 0.090) < 0.0001)

  if (fabs(num - 0.064) < 0.0001) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Грунтовые поверхности (спланированные)";
    isItem = true;

  } //if (fabs(num - 0.064) < 0.0001)

  if (fabs(num - 0.038) < 0.0001) {

    if (!isItem) str += text1;
    if (isItem) str += ",";
    str += " Газоны";
    isItem = true;

  } //if (fabs(num - 0.038) < 0.0001)

  if (!isItem) { str += "<b>Z<sub>mid</sub> =</b> "; str += QString().setNum(toPrec(num), 'g', STRPREC); }

  emit newMessage(str);

} //void TermsAndMaterials::genDoubleMessageZmid(double num)

void TermsAndMaterials::genIntMessageRegion(int num) {

  QString str("");
  str += " ";

  switch (num) {

     case  1: str += "Побережья Белого и Баренцева морей"; break;
     case  2: str += "Север европейской части СССР и Западной Сибири"; break;
     case  3: str += "Равнинные области запада и центра европейской части СССР"; break;
     case  4: str += "Равнинные области Украины"; break;
     case  5: str += "Возвышенности европейской части СССР. Западный склон Урала"; break;
     case  6: str += "Восток Украины, низовье Волги и Дона, Южный Крым"; break;
     case  7: str += "Нижнее Поволжье"; break;
     case  8: str += "Наветренные склоны возвышенностей европейской части СССР"; break;
     case  9: str += "Северное Предкавказье"; break;
     case 10: str += "Ставропольская возвышенность"; break;
     case 11: str += "Северные предгорья Большого Кавказа"; break;
     case 12: str += "Северный склон Большого Кавказа"; break;
     case 13: str += "Южная часть Западной Сибири, среднее течение р. Или"; break;
     case 14: str += "Район оз. Але-Куль"; break;
     case 15: str += "Центральный и Северо-Восточный Казахстан, предгорья Алтая"; break;
     case 16: str += "Северные склоны Западных Саян, Заилийского Алатау"; break;
     case 17: str += "Джунгарский Алатау, Кузнецкий Алатау, Алтай"; break;
     case 18: str += "Северный склон Западный Саян"; break;
     case 19: str += "Средняя Сибирь"; break;
     case 20: str += "Хребет Хамар-Дабан"; break;
     case 21: str += "Восточная Сибирь"; break;
     case 22: str += "Бассейны Шилки и Аргуни, долина Среднего Амура"; break;
     case 23: str += "Бассейны Колымы и рек Охотского моря"; break;
     case 24: str += "Северная часть Нижнеамурской неизменности"; break;
     case 25: str += "Побережье Охотского моря, бассейны рек Берингова моря"; break;
     case 26: str += "Центр и запад Камчатки"; break;
     case 27: str += "Восточное побережье Камчатки южнее 56"; str += QChar(176); str += " с.ш."; break;
     case 28: str += "Побережье Татарского пролива"; break;
     case 29: str += "Район оз. Ханка"; break;
     case 30: str += "Бассейны рек Японского моря, о. Сахалин, Курильские о-ва"; break;
     case 31: str += "Юг Казахстана, равнина Средней Азии и склоны гор до 1500м"; break;
     case 32: str += "Бассейн оз.Иссык-Куль до 2500м"; break;
     case 33: str += "Склоны гор Средней Азии на высоте 1500-3000м"; break;
     case 34: str += "Юго-Западная Туркмения"; break;
     case 35: str += "Черноморское побережье"; break;
     case 36: str += "Западный склон Большого Кавказа до Сухуми"; break;
     case 37: str += "Побережье Каспийского моря и равнина от Махачкалы до Баку"; break;
     case 38: str += "Восточный склон Большого Кавказа"; break;
     case 39: str += "Кура-Араксинская низменность до 500м"; break;
     case 40: str += "Южный склон Большого Кавказа выше 1500м"; break;
     case 41: str += "Южный склон выше 500м, ДагАССР"; break;
     case 42: str += "Побережье Черного моря Сухуми"; break;
     case 43: str += "Колхидская низменность, склоны Кавказа до 2000м"; break;
     case 44: str += "Бассейн Куры, восточная часть Малого Кавказа"; break;
     case 45: str += "Талышский хребет"; break;
     case 46: str += "Северо-западная и центральная части Армении"; break;
     case 47: str += "Ленкорань"; break;

  } //switch (num)

  emit newMessage(str);

} //void TermsAndMaterials::genIntMessageRegion(int num)

void TermsAndMaterials::setConcrete(const QString & str) {

  int num = 0;

  setTextLabel(str, EDIT_CLCONCRETE);

  if (str.trimmed() == "B2.5")   num = 1;
  if (str.trimmed() == "B5")	 num = 2;
  if (str.trimmed() == "B7.5")	 num = 3;
  if (str.trimmed() == "B10")	 num = 4;
  if (str.trimmed() == "B12.5")	 num = 5;
  if (str.trimmed() == "B15")	 num = 6;

  emit callUpdateConcrete(num);

} //void TermsAndMaterials::setConcrete(const QString & str)

void TermsAndMaterials::genIntMessage(const QString & var, int num, const QString & addStr) {

  QString str("");
  str += var;
  str += QString().setNum(num);
  str += addStr;

  emit newMessage(str);

} //void TermsAndMaterials::genIntMessage(const QString & var, int num, const QString & addStr)

void TermsAndMaterials::genDoubleMessage(const QString & var, double num, const QString & addStr) {

  QString str("");
  str += var;
  str += QString().setNum(toPrec(num), 'g', STRPREC);
  str += addStr;

  emit newMessage(str);

} //void TermsAndMaterials::genDoubleMessage(const QString & var, double num, const QString & addStr)

void TermsAndMaterials::genStrMessage(const QString & var, const QString & num, const QString & addStr) {

  QString str("");
  str += var;
  str += num;
  str += addStr;

  emit newMessage(str);

} //void TermsAndMaterials::genStrMessage(const QString & var, const QString & num, const QString & addStr)

int TermsAndMaterials::valueIntSpin(int nameCell) {

  switch (nameCell) {

     case EDIT_N:		return editN->valueIntSpin();		break;
     case EDIT_REGION:		return editRegion->valueIntSpin(); 	break;
     case EDIT_P: 		return editP->valueIntSpin(); 		break;
     case EDIT_Q20: 		return editQ20->valueIntSpin(); 	break;
     case EDIT_ZMID: 		return editZmid->valueIntSpin(); 	break;
     case EDIT_T: 		return editT->valueIntSpin(); 		break;
     case EDIT_CLCONCRETE:	return editConcrete->valueIntSpin(); 	break;

  } //switch (nameCell)

  return 0;

} //int TermsAndMaterials::valueIntSpin(int nameCell)

void TermsAndMaterials::setValueIntSpin(int newVal, int nameCell) {

  switch (nameCell) {

     case EDIT_N:	    genIntMessage("<b>N =</b> ", newVal, "");                  editN->setValueIntSpin(newVal);        break;
     case EDIT_REGION: 	    genIntMessageRegion(newVal);           	  	       editRegion->setValueIntSpin(newVal);   break;
     case EDIT_P: 	    genIntMessage("<b>P =</b> ", newVal, " <i>лет</i>");       editP->setValueIntSpin(newVal);        break;
     case EDIT_Q20: genIntMessage("<b>q<sub>20</sub> =</b> ", newVal, " <i>л/с на га</i>"); editQ20->setValueIntSpin(newVal); break;
     case EDIT_ZMID: genIntMessage("<b>z<sub>mid</sub> =</b> ", newVal, "");   	       editZmid->setValueIntSpin(newVal);     break;
     case EDIT_T: 	    genIntMessage("<b>t<sub>r</sub> =</b> ", newVal, " <i>мин</i>");  editT->setValueIntSpin(newVal);   break;
     case EDIT_CLCONCRETE:  genIntMessage("<b>Марка бетона =</b> ", newVal, "");       editConcrete->setValueIntSpin(newVal); break;

  } //switch (nameCell)

} //void TermsAndMaterials::setValueIntSpin(int newVal, int nameCell)

double TermsAndMaterials::valueDoubleSpin(int nameCell) {

  switch (nameCell) {

     case EDIT_N:		return editN->valueDoubleSpin(); break;
     case EDIT_REGION: 		return editRegion->valueDoubleSpin(); break;
     case EDIT_P: 		return editP->valueDoubleSpin(); break;
     case EDIT_Q20: 		return editQ20->valueDoubleSpin(); break;
     case EDIT_ZMID: 		return editZmid->valueDoubleSpin(); break;
     case EDIT_T: 		return editT->valueDoubleSpin(); break;
     case EDIT_CLCONCRETE:	return editConcrete->valueDoubleSpin(); break;

  } //switch (nameCell)

  return 0;

} //double TermsAndMaterials::valueDoubleSpin(int nameCell)

void TermsAndMaterials::setValueDoubleSpin(double newVal, int nameCell) {

  switch (nameCell) {

     case EDIT_N:	   genDoubleMessageN(newVal);					editN->setValueDoubleSpin(newVal);        break;
     case EDIT_REGION:     genDoubleMessage("<b>Регион =</b> ", newVal, "");  	        editRegion->setValueDoubleSpin(newVal);   break;
     case EDIT_P: 	   genDoubleMessage("<b>P =</b> ", newVal, " <i>лет</i>");      editP->setValueDoubleSpin(newVal);        break;
     case EDIT_Q20: genDoubleMessage("<b>q<sub>20</sub> =</b> ", newVal, " <i>л/с на га</i>");editQ20->setValueDoubleSpin(newVal);break;
     case EDIT_ZMID: 	   genDoubleMessageZmid(newVal);	               	  	editZmid->setValueDoubleSpin(newVal);     break;
     case EDIT_T: genDoubleMessage("<b>t<sub>r</sub> =</b> ", newVal, " <i>мин</i>");  	editT->setValueDoubleSpin(newVal); 	  break;
     case EDIT_CLCONCRETE: genDoubleMessage("<b>Марка бетона =</b> ", newVal, "");      editConcrete->setValueDoubleSpin(newVal); break;

  } //switch (nameCell)

} //void TermsAndMaterials::setValueDoubleSpin(double newVal, int nameCell)

QString TermsAndMaterials::textLabel(int nameCell) {

  switch (nameCell) {

     case EDIT_N:		return editN->textLabel(); break;
     case EDIT_REGION: 		return editRegion->textLabel(); break;
     case EDIT_P: 		return editP->textLabel(); break;
     case EDIT_Q20: 		return editQ20->textLabel(); break;
     case EDIT_ZMID: 		return editZmid->textLabel(); break;
     case EDIT_T: 		return editT->textLabel(); break;
     case EDIT_CLCONCRETE:	return editConcrete->textLabel(); break;

  } //switch (nameCell)

  return 0;

} //QString TermsAndMaterials::textLabel(int nameCell)

void TermsAndMaterials::setTextLabel(const QString & str, int nameCell) {

  switch (nameCell) {

     case EDIT_N:	   genStrMessage("<b>N =</b> ", str, "");		  editN->setTextLabel(str);	   break;
     case EDIT_REGION: 	   genStrMessage("<b>Регион =</b> ", str, "");		  editRegion->setTextLabel(str);   break;
     case EDIT_P: 	   genStrMessage("<b>P =</b> ", str, " <i>лет</i>");	  editP->setTextLabel(str); 	   break;
     case EDIT_Q20: 	   genStrMessage("<b>q<sub>20</sub> =</b> ", str, " <i>л/с на га</i>"); editQ20->setTextLabel(str); 	   break;
     case EDIT_ZMID: 	   genStrMessage("<b>z<sub>mid</sub> =</b> ", str, "");	  editZmid->setTextLabel(str); 	   break;
     case EDIT_T: 	   genStrMessage("<b>t<sub>r</sub> =</b> ", str, " <i>мин</i>");  editT->setTextLabel(str); 	   break;
     case EDIT_CLCONCRETE: genStrMessage("<b>Марка бетона =</b> ", str, "");		  editConcrete->setTextLabel(str); break;

  } //switch (nameCell)

} //void TermsAndMaterials::setTextLabel(const QString & str, int nameCell)

QString TermsAndMaterials::addStr(int nameCell) {

  switch (nameCell) {

     case EDIT_N:		return editN->addStr(); break;
     case EDIT_REGION: 		return editRegion->addStr(); break;
     case EDIT_P: 		return editP->addStr(); break;
     case EDIT_Q20: 		return editQ20->addStr(); break;
     case EDIT_ZMID: 		return editZmid->addStr(); break;
     case EDIT_T: 		return editT->addStr(); break;
     case EDIT_CLCONCRETE:	return editConcrete->addStr(); break;

  } //switch (nameCell)

  return 0;

} //QString TermsAndMaterials::addStr(int nameCell)

void TermsAndMaterials::setAddStr(const QString & str, int nameCell) {

  switch (nameCell) {

     case EDIT_N:		editN->setAddStr(str); break;
     case EDIT_REGION: 		editRegion->setAddStr(str); break;
     case EDIT_P: 		editP->setAddStr(str); break;
     case EDIT_Q20: 		editQ20->setAddStr(str); break;
     case EDIT_ZMID: 		editZmid->setAddStr(str); break;
     case EDIT_T: 		editT->setAddStr(str); break;
     case EDIT_CLCONCRETE:	editConcrete->setAddStr(str); break;

  } //switch (nameCell)

} //void TermsAndMaterials::setAddStr(const QString & str, int nameCell)

void TermsAndMaterials::setLabelView(int nameCell) {

  switch (nameCell) {

     case EDIT_N:		editN->setLabelView(); break;
     case EDIT_REGION: 		editRegion->setLabelView(); break;
     case EDIT_P: 		editP->setLabelView(); break;
     case EDIT_Q20: 		editQ20->setLabelView(); break;
     case EDIT_ZMID: 		editZmid->setLabelView(); break;
     case EDIT_T: 		editT->setLabelView(); break;
     case EDIT_CLCONCRETE:	editConcrete->setLabelView(); break;

  } //switch (nameCell)

} //void TermsAndMaterials::setLabelView(int nameCell)

void TermsAndMaterials::setEditorView(int nameCell) {

  switch (nameCell) {

     case EDIT_N:		editN->setEditView(); break;
     case EDIT_REGION: 		editRegion->setEditView(); break;
     case EDIT_P: 		editP->setEditView(); break;
     case EDIT_Q20: 		editQ20->setEditView(); break;
     case EDIT_ZMID: 		editZmid->setEditView(); break;
     case EDIT_T: 		editT->setEditView(); break;
     case EDIT_CLCONCRETE:	editConcrete->setEditView(); break;

  } //switch (nameCell)

} //void TermsAndMaterials::setEditorView(int nameCell)

void TermsAndMaterials::setAllLabelView() {

  editN->setLabelView();
  editConcrete->setLabelView();
  editRegion->setLabelView();
  editP->setLabelView();
  editQ20->setLabelView();
  editZmid->setLabelView();
  editT->setLabelView();

} //void TermsAndMaterials::setAllLabelView()

void TermsAndMaterials::mousePressEvent(QMouseEvent *) {
  
  this->setFocus();

} //void TermsAndMaterials::mousePressEvent(QMouseEvent *event)

void TermsAndMaterials::keyPressEvent(QKeyEvent * event) {

  if ((event->key() == Qt::Key_Escape) || (event->key() == Qt::Key_Return)) {

    this->setFocus();

  } //else if (event->key() == Qt::Key_Return)

} //void TermsAndMaterials::keyPressEvent(QKeyEvent * event)
